package 每日一题;

/**
 * @author: yan
 * @description: 交换字符使得字符串相同
 * @create: 2023-02-27 17:00
 **/

/**
 * 有两个长度相同的字符串s1 和s2，且它们其中只含有字符"x" 和"y"，你需要通过「交换字符」的方式使这两个字符串相同
 * 每次「交换字符」的时候，你都可以在两个字符串中各选一个字符进行交换。
 * 交换只能发生在两个不同的字符串之间，绝对不能发生在同一个字符串内部。也就是说，我们可以交换s1[i] 和s2[j]，但不能交换s1[i] 和s1[j]。
 * 最后，请你返回使 s1 和 s2 相同的最小交换次数，如果没有方法能够使得这两个字符串相同，则返回-1 。
 *
 */

/**
 * 思路 （贪心）
 * 1、xy与yx记录不同的次数
 * 2、两种方法
 *      通过一次交换，使得xy或yx减2
 *      通过交换两次，使得xy和yx各减1
 * xy+yx为奇数则无法交换
 *
 */
public class Solution1247 {

    public int minimumSwap(String s1, String s2) {
        int xy = 0, yx = 0;
        for (int i = 0; i < s1.length(); i++) {
            char c1 = s1.charAt(i), c2 = s2.charAt(i);
            if (c1 == c2) continue;
            if (c1 == 'x' && c2 == 'y') xy++;
            if (c1 == 'y' && c2 == 'x') yx++;
        }
        if ((xy+yx) % 2 == 1) return -1;
        return xy/2 + yx/2 + xy%2 + yx%2;
    }

}
